package br.com.virtual.base.controller.areaUsuario;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

import javax.annotation.PostConstruct;
import javax.ejb.EJB;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.context.FacesContext;

import org.primefaces.event.ToggleEvent;

import br.com.virtual.base.controller.util.VirtualMB;
import br.com.virtual.base.enums.StatusVendaEnum;
import br.com.virtual.cadastrar.model.Usuario;
import br.com.virtual.vender.model.Venda;
import br.com.virtual.vender.service.PagamentoService;
import br.com.virtual.vender.service.VendaService;

@ManagedBean
@ViewScoped
public class AreaUsuarioMB extends VirtualMB {

	private static final long serialVersionUID = 1L;
	private Usuario usuario;
	private List<Venda> vendas;
	private Venda venda;
	private StatusVendaEnum statusVendasExibir;

	@EJB
	private VendaService vendaService;
	
	@EJB private PagamentoService pagamentoService;

	@PostConstruct
	private void init() {

		this.verificaAutenticacao();
		usuario = getUsuarioLogado();
		
		this.statusVendasExibir = (StatusVendaEnum) this.getFlash("statusExibir");
	}

	public void onRowToggle(ToggleEvent event) {

		this.venda = (Venda) event.getData();
		this.venda.setItens(this.vendaService.getItens(this.venda));

	}

	public String editDadosPessoais() {

		FacesContext.getCurrentInstance().getExternalContext().getFlash()
				.put("pessoa", this.usuario.getPessoa());
		FacesContext.getCurrentInstance().getExternalContext().getFlash()
				.put("retorno", "/area_usuario/index.jsf");

		return "dados_pessoais";
	}

	public String editSenha() {

		FacesContext.getCurrentInstance().getExternalContext().getFlash()
				.put("retorno", "/area_usuario/index.jsf");

		return "alterar_senha";
	}

	public String editEnderecos() {

		FacesContext.getCurrentInstance().getExternalContext().getFlash()
				.put("retorno", "/area_usuario/index.jsf");

		return "enderecos";

	}

	public String comprasEmAndamento() {

		this.setFlash("statusExibir", StatusVendaEnum.EM_TRANSPORTE);
		return "minhas_compras.jsf";
	}

	public String comprasTodas() {

		this.setFlash("statusExibir", StatusVendaEnum.ENTREGE);
		return "minhas_compras.jsf";
	}

	private List<Venda> vendasByCliente() {
		if (this.usuario != null) {

			if (this.statusVendasExibir.equals(StatusVendaEnum.EM_TRANSPORTE))
				return this.vendaService
						.getListByPessoaEmAndamento(this.usuario.getPessoa());
			else
				return this.vendaService.getListByPessoa(this.usuario
						.getPessoa());

		} else
			return new ArrayList<Venda>();
	}
	
	public Venda verificaVenda(Venda venda){
		return pagamentoService.validarPagamento(venda);
	}
	
	public boolean renderLinkPagamento(Venda venda){
		
		if(!isNull(venda) && !isNull(venda.getPagamento()) && venda.getStatus().equals(StatusVendaEnum.AGUARDANDO_PAGAMENTO) && venda.getPagamento().getLinkPagamento() != null )
			return true;
		return false;
	}

	/*
	 * GETTERS AND SETTERS
	 */

	public Usuario getUsuario() {
		return usuario;
	}

	public void setUsuario(Usuario usuario) {
		this.usuario = usuario;
	}

	public List<Venda> getVendas() {
		if (vendas == null) {
			vendas = vendasByCliente();
			Collections.sort(vendas, Collections.reverseOrder());
			
			for (Venda venda : vendas) {
				verificaVenda(venda);
			}
			
		}
		return vendas;
	}

	public void setVendas(List<Venda> vendas) {
		this.vendas = vendas;
	}

	public Venda getVenda() {
		return venda;
	}

	public void setVenda(Venda venda) {
		this.venda = venda;
	}

}
